home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1998 July
/
EnigmA AMIGA RUN 29 (1998)(G.R. Edizioni)(IT)[!][issue 1998-07 & 08].iso
/
cd-sup
/
classact
/
examples
/
speedbar
/
speedbarexample.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-05-24
|
14KB
|
574 lines
;/* SpeedBar Example
sc link speedbarexample.c lib lib:classact.lib
quit
*/
/* system includes
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <exec/types.h>
#include <exec/memory.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <graphics/gfxbase.h>
#include <graphics/text.h>
#include <graphics/gfxmacros.h>
#include <utility/tagitem.h>
#include <workbench/startup.h>
#include <workbench/workbench.h>
#include <proto/intuition.h>
#include <proto/graphics.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/utility.h>
#include <proto/wb.h>
#include <proto/icon.h>
/* ClassAct includes
*/
#include <classact.h>
/* Local function prototypes.
*/
BOOL make_speedbar_list(struct List *, struct Image *, UBYTE **);
VOID free_speedbar_list(struct List *);
/* Image data definitions.
*/
__chip UWORD sb_data[][64] =
{
/* Cut
*/
{
/* Plane 0 */
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0e01, 0xc000, 0x1107, 0x8000,
0x191e, 0x0000, 0x0f78, 0x0000,
0x01e0, 0x0000, 0x0f78, 0x0000,
0x191e, 0x0000, 0x1107, 0x8000,
0x0e01, 0xc000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
/* Plane 1 */
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000
},
/* Copy
*/
{
/* Plane 0 */
0x0000, 0x0000, 0x0000, 0x0000,
0x01fe, 0x0000, 0x0186, 0x0000,
0x01fe, 0x0000, 0x0630, 0x8000,
0x1fff, 0xe000, 0x1f87, 0xe000,
0x1f03, 0xe000, 0x1f03, 0xe000,
0x1f03, 0xe000, 0x1f87, 0xe000,
0x1fff, 0xe000, 0x1fff, 0xe000,
0x0000, 0x0000, 0x0000, 0x0000,
/* Plane 1 */
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0078, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0060, 0x0000, 0x0044, 0x0000,
0x0004, 0x0000, 0x0018, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000
},
/* Paste
*/
{
/* Plane 0 */
0x0000, 0x0000, 0x003f, 0x0000,
0x0021, 0x0000, 0x007f, 0x8000,
0x0080, 0x4000, 0x0081, 0xc000,
0x0780, 0x4000, 0x0861, 0xc000,
0x0f20, 0x4000, 0x0891, 0xc000,
0x0950, 0x4000, 0x0251, 0xc000,
0x05e0, 0x4000, 0x0880, 0xc000,
0x307f, 0x8000, 0x0000, 0x0000,
/* Plane 1 */
0x0000, 0x0000, 0x0000, 0x0000,
0x0006, 0x0000, 0x0000, 0x0000,
0x0007, 0x0000, 0x0002, 0x0000,
0x0002, 0x0000, 0x0782, 0x0000,
0x00c2, 0x0000, 0x0062, 0x0000,
0x0222, 0x0000, 0x0422, 0x0000,
0x0802, 0x0000, 0x1002, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000
},
/* Erase
*/
{
/* Plane 0 */
0x0000, 0x0000, 0x002e, 0xb800,
0x005d, 0x7800, 0x00ba, 0xf800,
0x01f5, 0xf000, 0x03eb, 0xe000,
0x05f7, 0xc000, 0x08ff, 0x8000,
0x107f, 0x0000, 0x103e, 0x0000,
0x101c, 0x0000, 0x0828, 0x0000,
0x0450, 0x0000, 0x02a0, 0x0000,
0x01ff, 0xf800, 0x0000, 0x0000,
/* Plane 1 */
0x0000, 0x0000, 0x001a, 0xa800,
0x0035, 0x5000, 0x006a, 0xa000,
0x0015, 0x4000, 0x000a, 0x8000,
0x0205, 0x0000, 0x0502, 0x0000,
0x0a80, 0x0000, 0x0540, 0x0000,
0x0aa0, 0x0000, 0x0540, 0x0000,
0x0280, 0x0000, 0x0100, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000
},
/* Mail
*/
{
/* Plane 0 */
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0800, 0xd000,
0x0094, 0xd000, 0x0000, 0x1000,
0x0060, 0x1000, 0x0000, 0x1000,
0x00d0, 0x1000, 0x0000, 0x1000,
0x1fff, 0xf000, 0x0000, 0x0000,
/* Plane 1 */
0x0000, 0x0000, 0x0000, 0x0000,
0x0018, 0x0000, 0x007c, 0x0000,
0x01ca, 0x0000, 0x0515, 0x0000,
0x3fff, 0xe000, 0x2bff, 0xe000,
0x3e97, 0xe000, 0x3fff, 0xe000,
0x3f6f, 0xe000, 0x3fff, 0xe000,
0x3fd7, 0xe000, 0x3fff, 0xe000,
0x0000, 0x0000, 0x0000, 0x0000
},
/* Time
*/
{
/* Plane 0 */
0x0000, 0x0000, 0x0070, 0x0000,
0x0376, 0x0000, 0x06db, 0x0000,
0x0505, 0x0000, 0x0262, 0x0000,
0x0421, 0x0000, 0x0421, 0x0000,
0x0439, 0x0000, 0x0401, 0x0000,
0x0401, 0x0000, 0x0202, 0x0000,
0x0104, 0x0000, 0x01fc, 0x0000,
0x0306, 0x0000, 0x0000, 0x0000,
/* Plane 1 */
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0020, 0x0000,
0x0000, 0x0000, 0x0098, 0x0000,
0x01dc, 0x0000, 0x01dc, 0x0000,
0x01c4, 0x0000, 0x01fc, 0x0000,
0x01fc, 0x0000, 0x00f8, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000
},
/* Date
*/
{
/* Plane 0 */
0x0000, 0x0000, 0x037b, 0x0000,
0x0285, 0x8000, 0x0201, 0x8000,
0x0201, 0x8000, 0x0299, 0x8000,
0x02a7, 0x8000, 0x052b, 0x8000,
0x0535, 0x8000, 0x080d, 0x8000,
0x1ff5, 0x8000, 0x0205, 0x8000,
0x0201, 0x8000, 0x03ff, 0x8000,
0x01ff, 0x8000, 0x0000, 0x0000,
/* Plane 1 */
0x0000, 0x0000, 0x0000, 0x0000,
0x017a, 0x0000, 0x01fe, 0x0000,
0x01fe, 0x0000, 0x0166, 0x0000,
0x0158, 0x0000, 0x02d4, 0x0000,
0x02c8, 0x0000, 0x07f2, 0x0000,
0x0000, 0x0000, 0x00aa, 0x0000,
0x0154, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000
},
/* Disk
*/
{
/* Plane 0 */
0x0000, 0x0000, 0x0038, 0x0000,
0x0054, 0x0000, 0x008e, 0x0000,
0x0107, 0x0000, 0x0207, 0x8000,
0x040b, 0xc000, 0x0417, 0xe000,
0x0e29, 0xe000, 0x0750, 0xc000,
0x03a0, 0x8000, 0x01d9, 0x8000,
0x00eb, 0x0000, 0x0076, 0x0000,
0x003c, 0x0000, 0x0010, 0x0000,
/* Plane 1 */
0x0020, 0x0000, 0x0070, 0x0000,
0x00c0, 0x0000, 0x01a4, 0x0000,
0x0352, 0x0000, 0x06ab, 0x0000,
0x0d53, 0x8000, 0x12a1, 0xc000,
0x1d46, 0xc000, 0x0e89, 0x0000,
0x0710, 0x0000, 0x03ac, 0x8000,
0x01d1, 0x0000, 0x00e2, 0x0000,
0x0074, 0x0000, 0x0000, 0x0000
},
/* Spray Paint
*/
{
/* Plane 0 */
0x0000, 0x0000, 0x0186, 0xc000,
0x01bf, 0x0000, 0x07ec, 0xc000,
0x0423, 0x0000, 0x0ff0, 0xc000,
0x1008, 0x0000, 0x1078, 0x0000,
0x1078, 0x0000, 0x1078, 0x0000,
0x1078, 0x0000, 0x1078, 0x0000,
0x1008, 0x0000, 0x1038, 0x0000,
0x1008, 0x0000, 0x0000, 0x0000,
/* Plane 1 */
0x0000, 0x0000, 0x0006, 0xc000,
0x003f, 0x0000, 0x000c, 0xc000,
0x0243, 0x0000, 0x0000, 0xc000,
0x02e0, 0x0000, 0x0440, 0x0000,
0x0470, 0x0000, 0x0440, 0x0000,
0x0470, 0x0000, 0x0440, 0x0000,
0x0440, 0x0000, 0x0440, 0x0000,
0x0440, 0x0000, 0x0000, 0x0000
},
/* Print
*/
{
/* Plane 0 */
0x0000, 0x0000, 0x03fe, 0x0000,
0x0205, 0x0000, 0x02a7, 0x0000,
0x0201, 0x0000, 0x02d5, 0x0000,
0x0201, 0x0000, 0x0601, 0x8000,
0x1fff, 0xe000, 0x2000, 0x1000,
0x2803, 0xd000, 0x2000, 0x1000,
0x3fff, 0xf000, 0x1fff, 0xe000,
0x0fff, 0xc000, 0x0000, 0x0000,
/* Plane 1 */
0x0000, 0x0000, 0x0000, 0x0000,
0x01fa, 0x0000, 0x0118, 0x0000,
0x01fe, 0x0000, 0x0102, 0x0000,
0x01fe, 0x0000, 0x01fe, 0x0000,
0x0000, 0x0000, 0x1555, 0x4000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000
}
};
/* Image structures for above data.
*/
struct Image sb_images[] =
{
{ 0, 0, 22, 16, 2, sb_data[0], 0x03, 0x00, NULL },
{ 0, 0, 22, 16, 2, sb_data[1], 0x03, 0x00, NULL },
{ 0, 0, 22, 16, 2, sb_data[2], 0x03, 0x00, NULL },
{ 0, 0, 22, 16, 2, sb_data[3], 0x03, 0x00, NULL },
{ 0, 0, 22, 16, 2, sb_data[4], 0x03, 0x00, NULL },
{ 0, 0, 22, 16, 2, sb_data[5], 0x03, 0x00, NULL },
{ 0, 0, 22, 16, 2, sb_data[6], 0x03, 0x00, NULL },
{ 0, 0, 22, 16, 2, sb_data[7], 0x03, 0x00, NULL },
{ 0, 0, 22, 16, 2, sb_data[8], 0x03, 0x00, NULL },
{ 0, 0, 22, 16, 2, sb_data[9], 0x03, 0x00, NULL },
};
/* speedbar window-title help strings.
*/
UBYTE *help_strs[] =
{
"Erase block and copy it to the clipboard",
"Copy block to the clipboard",
"Paste from clipboard to your project",
"Erase block",
"Mail someone",
"Insert current time",
"Insert current date",
"Disk",
"Spray Paint",
"Print project",
NULL
};
/* object/gadget/button id's
*/
enum
{
SBID_ERASECLIP=0,
SBID_COPYCLIP,
SBID_PASTECLIP,
SBID_DELETE,
SBID_EMAIL,
SBID_INSTIME,
SBID_INSDATE,
SBID_SAVEDISK,
SBID_PAINT,
SBID_PRINT,
SBID_LAST
};
enum
{
GID_SPEEDBAR=0,
GID_QUIT,
GID_LAST
};
enum
{
WID_MAIN=0,
WID_LAST
};
enum
{
OID_MAIN=0,
OID_LAST
};
/* Create the SpeedBar Exec list.
*/
BOOL make_speedbar_list(struct List *list, struct Image *images, UBYTE **help)
{
struct Node *node;
WORD i = SBID_ERASECLIP;
NewList(list);
while (i < SBID_LAST)
{
if (node = (struct Node *)AllocSpeedButtonNode(
i, /* speed button id! */
SBNA_Image, images,
SBNA_Help, *help,
SBNA_Enabled, TRUE,
SBNA_Spacing, 2,
SBNA_Highlight, SBH_RECESS,
TAG_DONE))
{
AddTail(list, node);
}
else
{
PutStr("Allocation failed\n");
return (FALSE);
}
images++;
i++;
help++;
}
return(TRUE);
}
/* Function to free a SpeedBar Exec List.
*/
VOID free_speedbar_list(struct List *list)
{
struct Node *node, *nextnode;
node = list->lh_Head;
while (nextnode = node->ln_Succ)
{
FreeSpeedButtonNode(node);
node = nextnode;
}
NewList(list);
}
int main(void)
{
struct MsgPort *AppPort;
struct Window *windows[WID_LAST];
struct Gadget *gadgets[GID_LAST];
Object *objects[OID_LAST];
struct List speedbar_list;
/* make sure our classes opened... */
if (!ButtonBase || !SpeedBarBase || !WindowBase || !LayoutBase)
return(30);
if ( make_speedbar_list(&speedbar_list, sb_images, help_strs) )
{
if ( AppPort = CreateMsgPort() )
{
/* Create the window object.
*/
objects[OID_MAIN] = WindowObject,
WA_ScreenTitle, "ClassAct Release 2.0",
WA_Title, "ClassAct SpeedBar Example",
WA_Activate, TRUE,
WA_DepthGadget, TRUE,
WA_DragBar, TRUE,
WA_CloseGadget, TRUE,
WA_SizeGadget, TRUE,
WINDOW_IconifyGadget, TRUE,
WINDOW_IconTitle, "SpeedBar",
WINDOW_AppPort, AppPort,
WINDOW_Position, WPOS_CENTERMOUSE,
WINDOW_ParentGroup, VGroupObject,
LAYOUT_SpaceOuter, TRUE,
LAYOUT_DeferLayout, TRUE,
LAYOUT_AddChild, gadgets[GID_SPEEDBAR] = SpeedBarObject,
GA_ID, GID_SPEEDBAR,
GA_RelVerify, TRUE,
SPEEDBAR_Orientation, SPEEDBAR_HORIZONTAL,
SPEEDBAR_Buttons, &speedbar_list,
SPEEDBAR_Background, 4,
SpeedBarEnd,
CHILD_MinWidth, 160,
LAYOUT_AddChild, VGroupObject,
CLASSACT_BackFill, NULL,
LAYOUT_SpaceOuter, TRUE,
LAYOUT_VertAlignment, LALIGN_CENTER,
LAYOUT_HorizAlignment, LALIGN_CENTER,
LAYOUT_BevelStyle, BVS_FIELD,
LAYOUT_AddImage, LabelObject,
LABEL_Text, "The speedbar supports scrolling list of image\n",
LABEL_Text, "buttons. When more buttons are available than\n",
LABEL_Text, "the visible space, you may scroll the list by\n",
LABEL_Text, "pressing the SHIFT key while clicking the LMB and\n",
LABEL_Text, "dragging the mouse. The speedbar also supports\n",
LABEL_Text, "several options such boolean buttons, and MX groups!\n",
LabelEnd,
LayoutEnd,
LAYOUT_AddChild, gadgets[GID_QUIT] = ButtonObject,
GA_ID, GID_QUIT,
GA_RelVerify, TRUE,
GA_Text,"_Quit",
ButtonEnd,
CHILD_WeightedHeight, 0,
EndGroup,
EndWindow;
/* Object creation sucessful?
*/
if (objects[OID_MAIN])
{
/* Open the window.
*/
if (windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN]))
{
ULONG wait, signal, app = (1L << AppPort->mp_SigBit);
ULONG done = FALSE;
ULONG result;
UWORD code;
/* Obtain the window wait signal mask.
*/
GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal);
/* Input Event Loop
*/
while (!done)
{
wait = Wait( signal | SIGBREAKF_CTRL_C | app );
if ( wait & SIGBREAKF_CTRL_C )
{
done = TRUE;
}
else
{
while ( (result = CA_HandleInput(objects[OID_MAIN], &code) ) != WMHI_LASTMSG )
{
switch (result & WMHI_CLASSMASK)
{
case WMHI_CLOSEWINDOW:
windows[WID_MAIN] = NULL;
done = TRUE;
break;
case WMHI_GADGETUP:
switch (result & WMHI_GADGETMASK)
{
case GID_SPEEDBAR:
printf("Speed Button Selected: %d\n", (int)code );
switch ((int)code)
{
case SBID_ERASECLIP:
break;
case SBID_COPYCLIP:
break;
case SBID_PASTECLIP:
break;
/* ... */
}
break;
case GID_QUIT:
done = TRUE;
break;
}
break;
case WMHI_ICONIFY:
CA_Iconify(objects[OID_MAIN]);
SetAttrs(gadgets[GID_SPEEDBAR], SPEEDBAR_Window, NULL, TAG_DONE);
windows[WID_MAIN] = NULL;
break;
case WMHI_UNICONIFY:
windows[WID_MAIN] = (struct Window *) CA_OpenWindow(objects[OID_MAIN]);
if (windows[WID_MAIN])
{
GetAttr(WINDOW_SigMask, objects[OID_MAIN], &signal);
if (gadgets[GID_SPEEDBAR])
{
SetAttrs(gadgets[GID_SPEEDBAR], SPEEDBAR_Window, windows[WID_MAIN], TAG_DONE);
}
}
else
{
done = TRUE; // error re-opening window!
}
break;
}
}
}
}
}
/* Disposing of the window object will
* also close the window if it is
* already opened and it will dispose of
* all objects attached to it.
*/
DisposeObject(objects[OID_MAIN]);
}
DeleteMsgPort(AppPort);
}
}
free_speedbar_list(&speedbar_list);
return(0);
}